/*1.利用ES6 Set方法去重*/
        function unique(arr){
            return Array.from(new Set(arr));
        }
//[ 1, 'true', false, 10, undefined, null, NaN, 'NaN', 0, {}, {} ]
//无法去掉{}

/*2.利用双层for循环嵌套和splice方法去重 */
// function unique(arr) {
//     for (var i = 0; i < arr.length; i++) {
//         for (var j = i + 1; j < arr.length; j++) {
//             if (arr[i] == arr[j]) {
//                 arr.splice(j, 1);
//                 j--;
//             }
//         }
//     }
//     return arr;
// }
//[ 1, 'true', false, 10, undefined, NaN, NaN, 'NaN', {}, {} ]

/*3.利用indexOf去重 */
// function unique(arr){
//     var array=[];
//     for(var i=0;i<arr.length;i++){
//         if(array.indexOf(arr[i])===-1){
//             array.push(arr[i]);
//         }
//     }
//     return array;
// }
//[ 1, 'true', false, 10, undefined, null, NaN, NaN, 'NaN', 0, {}, {} ]

/*4.利用sort */
// function unique(arr){
//     arr=arr.sort();
//     var array=[arr[0]];
//     for(var i=1;i<arr.length;i++){
//         if(arr[i]!==arr[i-1]){
//             array.push(arr[i]);
//         }
//     }
//     return array;
// }
//[ 0, 1, 10, 'NaN', NaN, NaN, {}, {}, false, null, 'true', undefined ]

/*5.利用includes */
// function unique(arr){
//     var array=[];
//     for(var i=0;i<arr.length;i++){
//         if(!array.includes(arr[i])){
//             array.push(arr[i]);
//         }
//     }
// }
//[ 0, 1, 10, 'NaN', NaN, NaN, {}, {}, false, null, 'true', undefined ]

/*6.利用hasOwnProperty */
function unique(arr){
    var obj=[];
    return arr.filter(function(item,index,arr){
        return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]=true);
    })
}
//[ 1, 'true', false, 10, undefined, null, NaN, 'NaN', 0, {} ]

var arr = [1, 1, 'true', 'true', false, false, 10, 10, undefined, undefined, null, null, NaN,NaN, 'NaN', 0, 0, {}, {}];
console.log(unique(arr));